var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var { createProxyMiddleware } = require('http-proxy-middleware');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

/* CORS跨域设置 */
app.use(cors())

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 创建一个代理中间件  
const proxy = createProxyMiddleware({  
  target: 'http://xxx.xxx.xxx.xxx',  
  changeOrigin: true,  
  router: (proxyReq, req, res) => {  
    delete proxyReq.headers.origin; // 后端服务可能会从这里校验 CORS
  }  
})

// 本地路由（希望从远程拉取结果请注释掉这里）
require('./routes/index')(app)
  
// 本地路由不存在的时候代理  
app.use('/proxy_path', (req, res, next) => {  
  // 这里可以添加一些逻辑来判断是否应该代理  
  console.log('--- proxy ---')
  
  // 直接调用代理中间件处理请求  
  return proxy(req, res, next);  
});  

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
